import { useRouter } from "next/router"; import { DATASET_ITEM_TABS } from "@/src/features/navigation/utils/dataset-item-tabs"; import { DatasetItemDetailPage } from "@/src/features/datasets/components/DatasetItemDetailPage"; import { DatasetItemViewModeContent } from "@/src/features/datasets/components/DatasetItemViewModeContent"; import { DatasetItemVersionedContent } from "@/src/features/datasets/components/DatasetItemVersionedContent"; import { DatasetVersionHistoryPanel } from "@/src/features/datasets/components/DatasetVersionHistoryPanel"; import { DatasetVersionWarningBanner } from "@/src/features/datasets/components/DatasetVersionWarningBanner"; import { api } from "@/src/utils/api"; import { useDatasetVersion } from "@/src/features/datasets/hooks/useDatasetVersion"; import { toDatasetSchema } from "@/src/features/datasets/utils/datasetItemUtils"; import { Switch } from "@/src/components/ui/switch"; import { Label } from "@/src/components/ui/label"; import { Button } from "@/src/components/ui/button"; import useSessionStorage from "@/src/components/useSessionStorage"; import { History, PanelRightOpen } from "lucide-react"; import { useState } from "react"; function DatasetItemContent() { const router = useRouter(); const projectId = router.query.projectId as string; const datasetId = router.query.datasetId as string; const itemId = router.query.itemId as string; const { selectedVersion, resetToLatest } = useDatasetVersion(); const isViewingOldVersion = selectedVersion !== null; const [showDiffMode, setShowDiffMode] = useSessionStorage( "datasetItem-showDiff", false, ); const [isVersionPanelOpen, setIsVersionPanelOpen] = useState(!!selectedVersion); // Fetch current item const item = api.datasets.itemByIdAtVersion.useQuery( { datasetId, projectId, datasetItemId: itemId, }, { refetchOnWindowFocus: false, }, ); // Fetch item at selected version if viewing old version const itemAtVersion = api.datasets.itemByIdAtVersion.useQuery( { projectId, datasetId, datasetItemId: itemId, version: selectedVersion!, }, { enabled: selectedVersion !== null, }, ); // Fetch dataset const dataset = api.datasets.byId.useQuery({ datasetId, projectId, }); // Fetch item version history for sidebar indicators const itemVersionHistory = api.datasets.itemVersionHistory.useQuery({ projectId, datasetId, itemId, }); // Check if item was changed at selected version (enables diff toggle) // Use 1 second tolerance to account for potential timestamp precision issues const itemChangedAtVersion = selectedVersion && itemVersionHistory.data?.some( (v) => Math.abs(v.getTime() - selectedVersion.getTime()) < 1000, ); return (
{/* Main content area */}
{/* Sticky banner without padding */} {isViewingOldVersion && selectedVersion && (
)} {/* Version panel toggle button */}
{/* Content with padding */}
{/* Diff mode toggle */} {isViewingOldVersion && selectedVersion && itemChangedAtVersion && (
)} {/* Item unchanged message */} {isViewingOldVersion && selectedVersion && !itemChangedAtVersion && (
Item unchanged in this version
)} {/* Main content area */} {isViewingOldVersion ? ( ) : ( )}
{/* Version history sidebar */} {isVersionPanelOpen && (
)}
); } export default DatasetItemContent;